{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# SVM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 首先 import 必要的模块\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "# 将数据分割训练数据与测试数据\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    " \n",
    "import sklearn.metrics as metrics\n",
    "#SVM并不能直接输出各类的概率，所以在这个例子中我们用正确率作为模型预测性能的度量\n",
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6</td>\n",
       "      <td>148.0</td>\n",
       "      <td>72.0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>125.0</td>\n",
       "      <td>33.6</td>\n",
       "      <td>0.627</td>\n",
       "      <td>50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>85.0</td>\n",
       "      <td>66.0</td>\n",
       "      <td>29.0</td>\n",
       "      <td>125.0</td>\n",
       "      <td>26.6</td>\n",
       "      <td>0.351</td>\n",
       "      <td>31</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>183.0</td>\n",
       "      <td>64.0</td>\n",
       "      <td>29.0</td>\n",
       "      <td>125.0</td>\n",
       "      <td>23.3</td>\n",
       "      <td>0.672</td>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>89.0</td>\n",
       "      <td>66.0</td>\n",
       "      <td>23.0</td>\n",
       "      <td>94.0</td>\n",
       "      <td>28.1</td>\n",
       "      <td>0.167</td>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>137.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>168.0</td>\n",
       "      <td>43.1</td>\n",
       "      <td>2.288</td>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \\\n",
       "0            6    148.0           72.0           35.0    125.0  33.6   \n",
       "1            1     85.0           66.0           29.0    125.0  26.6   \n",
       "2            8    183.0           64.0           29.0    125.0  23.3   \n",
       "3            1     89.0           66.0           23.0     94.0  28.1   \n",
       "4            0    137.0           40.0           35.0    168.0  43.1   \n",
       "\n",
       "   DiabetesPedigreeFunction  Age  Outcome  \n",
       "0                     0.627   50        1  \n",
       "1                     0.351   31        0  \n",
       "2                     0.672   32        1  \n",
       "3                     0.167   21        0  \n",
       "4                     2.288   33        1  "
      ]
     },
     "execution_count": 131,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读取数据\n",
    "# path to where the data lies\n",
    "train = pd.read_csv(\"DP_diabetes.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 768 entries, 0 to 767\n",
      "Data columns (total 9 columns):\n",
      "Pregnancies                 768 non-null int64\n",
      "Glucose                     768 non-null float64\n",
      "BloodPressure               768 non-null float64\n",
      "SkinThickness               768 non-null float64\n",
      "Insulin                     768 non-null float64\n",
      "BMI                         768 non-null float64\n",
      "DiabetesPedigreeFunction    768 non-null float64\n",
      "Age                         768 non-null int64\n",
      "Outcome                     768 non-null int64\n",
      "dtypes: float64(6), int64(3)\n",
      "memory usage: 54.1 KB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.845052</td>\n",
       "      <td>121.656250</td>\n",
       "      <td>72.386719</td>\n",
       "      <td>29.108073</td>\n",
       "      <td>140.671875</td>\n",
       "      <td>32.455208</td>\n",
       "      <td>0.471876</td>\n",
       "      <td>33.240885</td>\n",
       "      <td>0.348958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>3.369578</td>\n",
       "      <td>30.438286</td>\n",
       "      <td>12.096642</td>\n",
       "      <td>8.791221</td>\n",
       "      <td>86.383060</td>\n",
       "      <td>6.875177</td>\n",
       "      <td>0.331329</td>\n",
       "      <td>11.760232</td>\n",
       "      <td>0.476951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>44.000000</td>\n",
       "      <td>24.000000</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>14.000000</td>\n",
       "      <td>18.200000</td>\n",
       "      <td>0.078000</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>99.750000</td>\n",
       "      <td>64.000000</td>\n",
       "      <td>25.000000</td>\n",
       "      <td>121.500000</td>\n",
       "      <td>27.500000</td>\n",
       "      <td>0.243750</td>\n",
       "      <td>24.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>117.000000</td>\n",
       "      <td>72.000000</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>125.000000</td>\n",
       "      <td>32.300000</td>\n",
       "      <td>0.372500</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>6.000000</td>\n",
       "      <td>140.250000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>127.250000</td>\n",
       "      <td>36.600000</td>\n",
       "      <td>0.626250</td>\n",
       "      <td>41.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>17.000000</td>\n",
       "      <td>199.000000</td>\n",
       "      <td>122.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>846.000000</td>\n",
       "      <td>67.100000</td>\n",
       "      <td>2.420000</td>\n",
       "      <td>81.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Pregnancies     Glucose  BloodPressure  SkinThickness     Insulin  \\\n",
       "count   768.000000  768.000000     768.000000     768.000000  768.000000   \n",
       "mean      3.845052  121.656250      72.386719      29.108073  140.671875   \n",
       "std       3.369578   30.438286      12.096642       8.791221   86.383060   \n",
       "min       0.000000   44.000000      24.000000       7.000000   14.000000   \n",
       "25%       1.000000   99.750000      64.000000      25.000000  121.500000   \n",
       "50%       3.000000  117.000000      72.000000      29.000000  125.000000   \n",
       "75%       6.000000  140.250000      80.000000      32.000000  127.250000   \n",
       "max      17.000000  199.000000     122.000000      99.000000  846.000000   \n",
       "\n",
       "              BMI  DiabetesPedigreeFunction         Age     Outcome  \n",
       "count  768.000000                768.000000  768.000000  768.000000  \n",
       "mean    32.455208                  0.471876   33.240885    0.348958  \n",
       "std      6.875177                  0.331329   11.760232    0.476951  \n",
       "min     18.200000                  0.078000   21.000000    0.000000  \n",
       "25%     27.500000                  0.243750   24.000000    0.000000  \n",
       "50%     32.300000                  0.372500   29.000000    0.000000  \n",
       "75%     36.600000                  0.626250   41.000000    1.000000  \n",
       "max     67.100000                  2.420000   81.000000    1.000000  "
      ]
     },
     "execution_count": 133,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "## 各属性的统计特性\n",
    "train.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a14e92e48>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Target 分布，看看各类样本分布是否均衡\n",
    "sns.countplot(train.Outcome);\n",
    "pyplot.xlabel('Outcome');\n",
    "pyplot.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y = train['Outcome']\n",
    "X = train.drop('Outcome',axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 数据标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# 初始化特征的标准化器\n",
    "ss_X = StandardScaler()\n",
    "\n",
    "# 分别对训练和测试数据的特征进行标准化处理\n",
    "X_train = ss_X.fit_transform(X_train)\n",
    "#X_test = ss_X.transform(X_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((614, 8), (154, 8))"
      ]
     },
     "execution_count": 137,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 随机采样20%的数据构建测试样本，其余作为训练样本\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.2, stratify=y)\n",
    "X_train.shape, X_test.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### default SVC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {},
   "outputs": [],
   "source": [
    "#LinearSVC不能得到每类的概率，这里只是示意SVM的使用方法\n",
    "#https://xacecask2.gitbooks.io/scikit-learn-user-guide-chinese-version/content/sec1.4.html\n",
    "#1.4.1.2. 得分与概率\n",
    "from sklearn.svm import LinearSVC\n",
    "\n",
    "SVC1 = LinearSVC().fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification report for classifier LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,\n",
      "     intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
      "     multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,\n",
      "     verbose=0):\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       0.68      0.99      0.81       100\n",
      "          1       0.89      0.15      0.25        54\n",
      "\n",
      "avg / total       0.76      0.69      0.61       154\n",
      "\n",
      "\n",
      "Confusion matrix:\n",
      "[[99  1]\n",
      " [46  8]]\n"
     ]
    }
   ],
   "source": [
    "#在校验集上测试，估计模型性能\n",
    "y_predict = SVC1.predict(X_test)\n",
    "\n",
    "print(\"Classification report for classifier %s:\\n%s\\n\"\n",
    "      % (SVC1, metrics.classification_report(y_test, y_predict)))\n",
    "print(\"Confusion matrix:\\n%s\" % metrics.confusion_matrix(y_test, y_predict))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 线性SVM正则参数调优"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "线性SVM LinearSVC的需要调整正则超参数包括C（正则系数，一般在log域（取log后的值）均匀设置候选参数）和正则函数penalty（L2/L1）\n",
    "\n",
    "采用交叉验证，网格搜索步骤与Logistic回归正则参数处理类似，在此略。\n",
    "\n",
    "这里我们用校验集（X_test、y_test）来估计模型性能"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def fit_grid_point_Linear(C, X_train, y_train, X_test, y_test):\n",
    "    \n",
    "    # 在训练集是那个利用SVC训练\n",
    "    SVC2 =  LinearSVC( C = C)\n",
    "    SVC2 = SVC2.fit(X_train, y_train)\n",
    "    \n",
    "    # 在校验集上返回accuracy\n",
    "    accuracy = SVC2.score(X_test, y_test)\n",
    "    \n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.7012987012987013\n",
      "accuracy: 0.7142857142857143\n",
      "accuracy: 0.3961038961038961\n",
      "accuracy: 0.6948051948051948\n",
      "accuracy: 0.7077922077922078\n",
      "accuracy: 0.6688311688311688\n",
      "accuracy: 0.7012987012987013\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a14f35588>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-3, 3, 7)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份  \n",
    "penalty_s = ['l1','l2']\n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "   for j, penalty in enumerate(penalty_s):\n",
    "    tmp = fit_grid_point_Linear(oneC, X_train, y_train, X_test, y_test)\n",
    "    accuracy_s.append(tmp)\n",
    "\n",
    "x_axis = np.log10(C_s)\n",
    "#for j, penalty in enumerate(penalty_s):\n",
    "pyplot.plot(x_axis, np.array(accuracy_s), 'b-')\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "pyplot.savefig('SVM_diabetes.png' )\n",
    "\n",
    "pyplot.show()\n",
    "  \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### RBF核SVM正则参数调优"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "RBF核是SVM最常用的核函数。 RBF核SVM 的需要调整正则超参数包括C（正则系数，一般在log域（取log后的值）均匀设置候选参数）和核函数的宽度gamma C越小，决策边界越平滑； gamma越小，决策边界越平滑。\n",
    "\n",
    "采用交叉验证，网格搜索步骤与Logistic回归正则参数处理类似，在此略。\n",
    "\n",
    "这里我们用校验集（X_val、y_val）来估计模型性能"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.svm import SVC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def fit_grid_point_RBF(C, gamma, X_train, y_train, X_test, y_test):\n",
    "    \n",
    "    # 在训练集是那个利用SVC训练\n",
    "    SVC3 =  SVC( C = C, kernel='rbf', gamma = gamma)\n",
    "    SVC3 = SVC3.fit(X_train, y_train)\n",
    "    \n",
    "    # 在校验集上返回accuracy\n",
    "    accuracy = SVC3.score(X_test, y_test)\n",
    "    \n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.6493506493506493\n",
      "accuracy: 0.7207792207792207\n",
      "accuracy: 0.7012987012987013\n",
      "accuracy: 0.6493506493506493\n",
      "accuracy: 0.7532467532467533\n",
      "accuracy: 0.7792207792207793\n",
      "accuracy: 0.7272727272727273\n",
      "accuracy: 0.6753246753246753\n",
      "accuracy: 0.7857142857142857\n",
      "accuracy: 0.7857142857142857\n",
      "accuracy: 0.7142857142857143\n",
      "accuracy: 0.6493506493506493\n",
      "accuracy: 0.7727272727272727\n",
      "accuracy: 0.7597402597402597\n",
      "accuracy: 0.6558441558441559\n",
      "accuracy: 0.6428571428571429\n"
     ]
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-1, 2, 4)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份 \n",
    "gamma_s = np.logspace(-5, -2, 4)  \n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "    for j, gamma in enumerate(gamma_s):\n",
    "        tmp = fit_grid_point_RBF(oneC, gamma, X_train, y_train, X_test, y_test)\n",
    "        accuracy_s.append(tmp)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a150192e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "accuracy_s1 =np.array(accuracy_s).reshape(len(C_s),len(gamma_s))\n",
    "x_axis = np.log10(C_s)\n",
    "for j, gamma in enumerate(gamma_s):\n",
    "    pyplot.plot(x_axis, np.array(accuracy_s1[:,j]), label = ' Test - log(gamma)' + str(np.log10(gamma)))\n",
    "\n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "pyplot.savefig('RBF_SVM_diabetes.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "最佳参数：C=10，gamma=0.00001"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
